iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
Software Development

成為一名 Kotlin 後端攻城獅系列 第 8

Day 8 資料結構-集合新增刪除元素 (1)

  • 分享至 

  • xImage
  •  

前兩天快速的帶過了 Kotlin 中的集合是什麼跟特性,接著我們來補充一下集合寫入的方法吧!今天將著重於列表 (List) 與集 (Set) 的新增與刪除方法。

列表與集的寫入

  • 新增元素

    val numbers = mutableListOf(1, 2, 3, 4)
    // numbers.add(5, 5)             // IndexOutOfBoundsException
    numbers.add(5)                   // [1, 2, 3, 4, 5]
    numbers.addAll(listOf(6, 7, 8))  // [1, 2, 3, 4, 5, 6, 7, 8]
    numbers.addAll(3, setOf(3, 4))   // [1, 2, 3, 4, 5, 3, 4, 6, 7, 8]
    
    • 這裡我們可以看到,第一行的的列表宣告是一個可變列表 (mutableListOf),如果這裡使用不可變列表宣告方式 (似第四行使用 listOf),那麼後面將無法對 numbers 進行修改。
    • 對於要加入的元素,我們也可以像第二行或第四行給予目錄 (index) 值,但我們必須要注意給定的目錄值不能超過當前的對大值,否則會噴錯喔!
    val numbers = listOf("one", "two")
    val newNumbers = numbers.plus("three")  // [one, two, three]
    val numbers2 = mutableListOf("one", "two")
    numbers2 += listOf("four", "five")      // [one, two, four, five]
    
    • 有別於 addaddAll ,我們也可以使用加減的方法對列表或集進行新增,上面範例裡我們可以看到 += 的用法會將新增後的列表賦予給原本變數,可以等價於:

      numbers2 = numbers2 + listOf("four", "five")
      
    • 其實不難想像為什麼 Kotlin 要保留兩種寫法,前者 add 系列其實是對原始變數直接進行修改 (注意,前天有提到就算使用 val 我還是可以對可變列表 (mutableList) 的內容進行修改) ,而 plus 系列則是會有回傳值且回傳值為更新後的值。
      如此設計對撰寫程式時增添靈活度,也請各位客官可以到 Kotlin Playground 體驗。

    • 補充: 如果使用 println 檢視 add 系列回傳值可以發現他是布林型別,但這裡列表和集的反應並 相同,對於列表來說,只要是合法元素就可以順利新增至列表並回傳 true ;但對於集來說,如果欲加入的元素已經存在,則加入行為為非法,如此就會回傳 false
      參考連結 (Kotlin Official)

  • 移除元素

    val numbers = mutableListOf(1, 2, 3, 4, 3)
    numbers.remove(3)                    // [1, 2, 4, 3]
    numbers.remove(5)                    // [1, 2, 4, 3]
    numbers.removeAt(2)                  // [1, 2, 3]
    numbers.removeAll(numbers)           // []
    
    val numbers2 = mutableListOf(1, 2, 3, 4, 3)
    numbers2.retainAll { it >= 3 }       // [3, 4, 3]
    numbers2.clear()                     // []
    
    • 相似於 add 系列,我們用 remove 來移除列表、集內的元素
    • 當元素有重複時會優先移除第一份元素
    • 當欲移除的元素 不存在,則不會對原本的集合作出任何操作
    val numbers = listOf("one", "two", "three", "three", "four")
    val newNumbers = numbers.minus("three")  // [one, two, three, four]
    // newNumbers -= "three"                 // Val cannot be reassigned
    
    val numbers2 = mutableListOf("one", "two", "three", "four")
    numbers2 -= listOf("four", "five")       // [one, two, three]
    //numbers -= listOf("four")              // 上面那行等效於這行
    
    • 跟新增元素相似,我們也可以用 -=, - 等減號運算去移除列表或是集裡面的元素
    • 操作跟限制與使用 + 相同,須注意這類運算子是會有回傳值的,必須留意變數宣告的可變性。

參考資料


上一篇
Day 7 資料結構-集合 (2)
下一篇
Day 9 資料結構-集合新增刪除元素 (2)
系列文
成為一名 Kotlin 後端攻城獅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言